/**
 * 检查token是否过期
 * @param {string} token JWT token字符串
 * @returns {boolean} 如果token过期返回true，否则返回false
 */
export function isTokenExpired(token) {
    if (!token || typeof token !== 'string') {
        return true;
    }

    try {
        const [header, payload, signature] = token.split('.');
        if (!header || !payload || !signature) {
            return true;
        }

        // Use a more efficient base64 decoding
        const decodedPayload = JSON.parse(Buffer.from(payload, 'base64').toString());
       
        
        if (!decodedPayload.exp || typeof decodedPayload.exp !== 'number') {
            return true;
        }
        return new Date() >= new Date(decodedPayload.exp*1000);
    } catch (error) {
        console.error('Token validation error:', error);
        return true;
    }
}



/**
 * 认证工具模块
 */

// 常量定义
export const TOKEN_STORAGE_KEY = 'USER_TOKEN';
export const LOGIN_ROUTE = '/pages/login/login';
export const ROUTE_WHITE_LIST = new Set([
  '/pages/index/index',
  '/pages/login/login',
  '/componentsPage/index-list/base/index-list?type=0',
  '/componentsPage/index-list/base/index-list?type=1',
  '/componentsPage/index-list/base/index-list?type=2',
  // 添加其他白名单路由...
]);

/**
 * 检查认证状态
 * @param {string} url - 目标路由地址
 * @returns {boolean} - 是否已认证
 */
export const checkAuth = (url,token) => {
    url = url || getCurrentPagePath();
    console.log('url', url);
  // 白名单路由直接放行
  if (ROUTE_WHITE_LIST.has(url)) {
    return true;
  }
 
  
  // 检查 token 是否存在且未过期
  if (!token || isTokenExpired(token)) {
    // 如果 token 存在但已过期，清除它
    if (token) {
      clearAuth();
    }
    return false;
  }
  
  return true;
};


/**
 * 清除认证信息
 */
export const clearAuth = () => {
  uni.removeStorageSync(TOKEN_STORAGE_KEY);
};

/**
 * 跳转到登录页
 * @param {string} [currentPath] - 当前页面路径（可选）
 */
export const toLogin = (currentPath) => {
  const redirectUrl = currentPath || getCurrentPagePath();
  uni.navigateTo({
    url: `${LOGIN_ROUTE}?redirect=${redirectUrl}`
  });
};

/**
 * 获取当前页面路径
 * @returns {string} 当前页面路径
 */
const getCurrentPagePath = () => {
  const pages = getCurrentPages();
  const currentPage = pages[pages.length - 1];
  return currentPage ? currentPage.route : '';
}; 